package top.xphu.java;

/**
 * 工厂模式
 * 不许需要知道产品的细节，只需要创建相应的工厂即可。
 * @author xphu
 * @version 1.0
 * @date 2021/7/19 17:41
 */
public class AbstractFactoryTest {
    public static void main(String[] args) {
        Phone huaweiPhone = new HuaweiPhoneFactory().newPhone();
        huaweiPhone.show();

        Phone applePhone = new ApplePhoneFactory().newPhone();
        applePhone.show();
    }
}


/**
 * 抽象产品(手机): 提供了产品的接口
 */
abstract class Phone {
    abstract public void show();
}

/**
 * 抽象工厂(手机厂)：提供了工厂生成产品的方法
 */
abstract class AbstractFactory {
    abstract public Phone newPhone();
}

/**
 * 具体的产品：苹果手机
 */
class ApplePhone extends Phone {
    @Override
    public void show() {
        System.out.println("苹果手机：Apple 14 Plus Max");
    }
}

/**
 * 具体的产品：华为手机
 */
class HuaWeiPhone extends Phone {
    @Override
    public void show() {
        System.out.println("华为手机: Mate100 Pro");
    }
}

/**
 * 具体工厂（富士康）
 */
class ApplePhoneFactory extends AbstractFactory {

    @Override
    public Phone newPhone() {
        return new ApplePhone();
    }
}

/**
 * 具体工厂（比亚迪）
 */
class HuaweiPhoneFactory extends AbstractFactory {

    @Override
    public Phone newPhone() {
        return new HuaWeiPhone();
    }
}